﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;

using MySql.Data.MySqlClient;

namespace MakeIT.MiraPark.Negocios
{
    public static partial class ModelBO
    {
        public static ConvenioVO getConvenio(int idConvenio)
        {
            List<ConvenioVO> listConvenioVOs = getConvenios(idConvenio, false);
            if (listConvenioVOs != null && listConvenioVOs.Count > 0)
                return listConvenioVOs[0];
            else
                return null;
        }
        
        public static List<ConvenioVO> getConvenios()
        {
            return getConvenios(null, false);
        }

        public static List<ConvenioVO> getConvenios(bool ativo)
        {
            return getConvenios(null, ativo);
        }

        public static List<ConvenioVO> getConvenios(int? idConvenio, bool ativo)
        {
            string where = "WHERE ";
            StringBuilder query = new StringBuilder();

            query.AppendLine("SELECT cv.IdConvenio, cv.IdCliente, c.Nome, cv.IdTabelaConvenio, tm.TabelaConvenio, cv.DiaPgto, cv.Vagas, cv.Ativo, cv.Situacao ");
            query.AppendLine("FROM convenio cv LEFT JOIN tabelaconvenio tm on cv.IdTabelaConvenio = tm.IdTabelaConvenio ");
            query.AppendLine("LEFT JOIN cliente c on cv.IdCliente = c.IdCliente ");
            if (idConvenio!=null)
            {
                query.AppendLine(where + "cv.IdConvenio=?IdConvenio ");
                where = "AND ";
            }
            if (ativo)
            {
                query.AppendLine(where + "cv.Ativo ");
                where = "AND ";
            }
            query.AppendLine("ORDER BY c.nome DESC ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            if (idConvenio != null) cmd.Parameters.AddWithValue("?IdConvenio", idConvenio);

            MySqlDataReader reader = null;
            try
            {
                cmd.Connection.Open();

                reader = cmd.ExecuteReader();

                List<ConvenioVO> listConvenio = new List<ConvenioVO>();

                while (reader.Read())
                {
                    ConvenioVO ConvenioVO = ConvenioVO.CreateConvenioVO();
                    ConvenioVO.idConvenio = reader.GetInt32("IdConvenio");
                    ConvenioVO.clienteVO.idCliente = reader.GetInt32("IdCliente");
                    ConvenioVO.clienteVO.nome = reader.GetString("Nome");
                    ConvenioVO.tabelaConvenioVO.idTabelaConvenio = reader.GetInt32("IdTabelaConvenio");
                    ConvenioVO.tabelaConvenioVO.tabelaConvenio = reader.GetString("TabelaConvenio");
                    ConvenioVO.diaPgto = reader.GetInt32("DiaPgto");
                    ConvenioVO.vagas = reader.GetInt32("Vagas");
                    ConvenioVO.ativo = (bool)reader.GetBoolean("Ativo");
                    ConvenioVO.situacao = reader.GetString("Situacao");

                    listConvenio.Add(ConvenioVO);
                }
                reader.Close();
                return listConvenio;
            }
            catch (Exception ex){ throw ex; }
            finally { cmd.Connection.Close(); }
        }

        public static void setConvenio(ConvenioVO ConvenioVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("UPDATE convenio ");
            query.AppendLine("SET IdCliente=?IdCliente, IdTabelaConvenio=?IdTabelaConvenio, DiaPgto=?DiaPgto, Vagas=?Vagas, Ativo=?Ativo, Situacao=?Situacao ");
            query.AppendLine("WHERE IdConvenio=?IdConvenio ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdConvenio", ConvenioVO.idConvenio);
            cmd.Parameters.AddWithValue("?IdCliente", ConvenioVO.idCliente);
            cmd.Parameters.AddWithValue("?IdTabelaConvenio", ConvenioVO.idTabelaConvenio);
            cmd.Parameters.AddWithValue("?DiaPgto", ConvenioVO.diaPgto);
            cmd.Parameters.AddWithValue("?Vagas", ConvenioVO.vagas);
            cmd.Parameters.AddWithValue("?Ativo", ConvenioVO.ativo);
            cmd.Parameters.AddWithValue("?Situacao", ConvenioVO.situacao);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static long newConvenio(ConvenioVO ConvenioVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("INSERT INTO convenio ");
            query.AppendLine("SET IdCliente=?IdCliente, IdTabelaConvenio=?IdTabelaConvenio, DiaPgto=?DiaPgto, Vagas=?Vagas, Ativo=?Ativo, Situacao=?Situacao ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdCliente", ConvenioVO.idCliente);
            cmd.Parameters.AddWithValue("?IdTabelaConvenio", ConvenioVO.idTabelaConvenio);
            cmd.Parameters.AddWithValue("?DiaPgto", ConvenioVO.diaPgto);
            cmd.Parameters.AddWithValue("?Vagas", ConvenioVO.vagas);
            cmd.Parameters.AddWithValue("?Ativo", ConvenioVO.ativo);
            cmd.Parameters.AddWithValue("?Situacao", ConvenioVO.situacao);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
                return cmd.LastInsertedId;
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }

        public static void delConvenio(ConvenioVO ConvenioVO)
        {
            StringBuilder query = new StringBuilder();

            query.AppendLine("DELETE FROM convenio ");
            query.AppendLine("WHERE IdConvenio=?IdConvenio ");

            MySqlCommand cmd = getConnection();
            cmd.CommandText = query.ToString();

            cmd.Parameters.AddWithValue("?IdConvenio", ConvenioVO.idConvenio);

            try
            {
                cmd.Connection.Open();

                cmd.ExecuteNonQuery();
            }
            catch (Exception ex) { throw ex; }
            finally { cmd.Connection.Close(); }

        }
    }
}
